package com.zlq.friends;

import android.content.Context;
import android.util.DisplayMetrics;

/**
 * Created by zhj on 2015/7/6.
 * 获得屏幕的各种信息
 */
public class ScreenUtil {

    public static final float DEFAULT_SCREEN_WIDTH = 540f;

    private DisplayMetrics metrics;

    public ScreenUtil(Context context) {
        metrics = context.getResources().getDisplayMetrics();
    }

    /**
     * 取得屏幕的宽度
     * @return
     */
    public int getWidth(){
        return metrics.widthPixels;
    }

    /**
     * 取得屏幕的高度
     * @return
     */
    public int getHeight(){
        return metrics.heightPixels;
    }

    /**
     * 屏幕密度（像素比例：0.75/1.0/1.5/2.0）
     * @return
     */
    public float getDensity(){
        return metrics.density;
    }

    /**
     * 屏幕密度（每寸像素：120/160/240/320）
     * @return
     */
    public int getDensityDpi(){
        return metrics.densityDpi;
    }

    public int getWidthPx(){
        return (int) (getWidth() * getDensity());
    }

    /**
     *
     * @return
     */
    public float getScaledDensity(){
        return metrics.scaledDensity;
    }

    /**
     * 根据屏幕密度得到实际的dip
     * @param targetDip
     * @return
     */
    public int getRealDip(int targetDip){
        return (int) (targetDip / getDensity());
    }

    public int getRealTextSize(int textSize){
        return (int) (getRealDip(textSize) / getDensity());
    }

    /**
     * dip转换成px
     * @param dipValue
     * @return
     */
    public float dip2px(float dipValue){
        return dipValue * getDensity() + 0.5f;
    }

    /**
     * px装换成dip
     * @param pxValue
     * @return
     */
    public int px2dip(float pxValue){
        return (int)(pxValue / getDensity() + 0.5f);
    }

    /**
     * 将px值转换为sp值，保证文字大小不变
     *
     * @param pxValue
     *            （DisplayMetrics类中属性scaledDensity）
     * @return
     */
    public int px2sp(float pxValue) {
        return (int) (pxValue / getScaledDensity() + 0.5f);
    }

    /**
     * 将sp值转换为px值，保证文字大小不变
     *
     * @param spValue
     *            （DisplayMetrics类中属性scaledDensity）
     * @return
     */
    public int sp2px(float spValue) {
        return (int) (spValue * getScaledDensity() + 0.5f);
    }

    /**
     * 得到屏幕和默认屏幕的宽度的比例
     * @return 屏幕和默认屏幕的宽度的比例
     */
    public float getPercent(){
        return getWidth() / DEFAULT_SCREEN_WIDTH;
    }

    /**
     *
     * @param oldSize
     * @return
     */
    public float getTargetTextSize(float oldSize){
        return getScaledSize(oldSize) / getScaledDensity();
    }

    public float getScaledSize(float oldSize){
        return oldSize * getPercent();
    }

    public String toString(){
        return "width: " + getWidth() + ", height: " + getHeight()+", density: " + getDensity()+", densityDpi: " + getDensityDpi() +", scaled density: " + getScaledDensity();
    }
}
